<?php 
/**
 * Executa o login por e-mail
 * @param string $user The username they entered (in this case email)
 * @param string $pass The password they entered
**/
function mp_email_login($user, $senha) {
	global $wpdb;
	
	if (is_email($user)) {
		
		$byEmail = $wpdb->get_var($wpdb->prepare("SELECT user_login FROM $wpdb->users WHERE user_email = '%s'", $user));
		$user = $byEmail ? $byEmail : $user;
		
	}
	return;
}
//add_action('wp_authenticate', 'mp_email_login', false, 2);

/**
 * Gerencia o Login para uma página específica
 * @return void
 */
function mp_login_init() {
	if	( isset($_GET['loggedout']) && TRUE == $_GET['loggedout'] ){
		if($_GET["redirect_to"]){
			wp_redirect($_GET["redirect_to"]);
		}else{
			wp_redirect('/');
		}
	}

	if ($_GET['checkemail'] == 'confirm')
	{
		$msg = 'Por favor verifique seu e-mail.';
		include(TEMPLATEPATH . '/lostpassword.php');
		die();
	}
	elseif($_GET['checkemail'] == 'newpass')
	{
		$msg = 'Uma nova senha foi enviado em seu e-mail';
		include(TEMPLATEPATH . '/lostpassword.php');
		die();
	}
	
	require( ABSPATH . '/wp-load.php' );
		
	if (isset($_REQUEST["action"])) {
		$action = $_REQUEST["action"];
	} else {
		$action = 'login';
	}
	
	switch($action) {
		case 'lostpassword' :
		case 'retrievepassword' :
			mp_password();
			break;
		case 'register':
			if ( !get_option('users_can_register') ) {
				wp_redirect(get_bloginfo('wpurl').'/wp-login.php?registration=disabled');
				exit();
			}
			
			if($_POST)
			{
				$result = mp_new_user($_POST["user_login"], $_POST["user_email"], $_POST["pass"]);

				if(!is_wp_error($result))
				{
					wp_redirect("/cadastro?status=success");
					die();
				}
				else
				{
					include(TEMPLATEPATH . '/cadastro.php');
					die();
				}
			}
			
			include(TEMPLATEPATH . '/cadastro.php');
			break;
		case 'login':
		default:
			mp_login();
			break;
	}
	die();
}

/**
 * Registra um novo usuário
 *
 * @param string $user_login Usuário para o login
 * @param string $user_email Email do Usuário
 * @param string $pass senha do usuário
 * @return int|WP_Error Either user's ID or error on failure.
 */
function mp_new_user($user_login, $user_email, $pass)
{
	$errors = new WP_Error();
	
	$user_login = sanitize_user( $user_login );
	$user_email = apply_filters( 'user_registration_email', $user_email );
	$pass = sanitize_text_field($pass);
	
	require_once( ABSPATH . WPINC . '/registration.php');
	
	// Checa o usuário
	if ( $user_login == '' || $user_login == 'Nome*')
	{
		$errors->add('empty_username', __('Por favor, digite um usuário.'));
	}
	elseif ( !validate_username( $user_login ) )
	{
		$errors->add('invalid_username', __('Esse usuário é inválido. Por favor, digite um usuário válido'));
		$user_login = '';
	} 
	elseif ( username_exists( $user_login ) )
	{
		$errors->add('username_exists', __('Esse usuário já foi registrado. Ultilize outro usuário'));
	}
	
	// Checa a senha
	if ($user_email == ''|| $user_email == 'Email*')
	{
		$errors->add('empty_email', __('Por favor, digite seu endereço de e-mail.'));
	} 
	elseif ( !is_email( $user_email ) )
	{
		$errors->add('invalid_email', __('O endereço de e-mail está incorreto'));
		$user_email = '';
	} 
	elseif ( email_exists( $user_email ) )
	{
		$errors->add('email_exists', __('Esse e-mai já foi registrado. Ultilize outro email'));
	}
	
	if ($pass == '' || $pass == 'Senha*')
	{
		$errors->add('empty_passl', __('Por favor, digite sua senha'));
	}
	
	do_action('register_post', $user_login, $user_email, $errors);
	
	$errors = apply_filters( 'registration_errors', $errors, $user_login, $user_email );
	
	if ( $errors->get_error_code() )
	{
		return $errors;
	}
	
	$user_id = wp_create_user( $user_login, $pass, $user_email );
	
	if ( !$user_id ) {
		$errors->add('registerfail', sprintf(__('Não conseguimos registrar você... por favor, entre em contato com o <a href="mailto:%s">webmaster</a> !'), get_option('admin_email')));
		return $errors;
	}

	wp_new_user_notification($user_id, $pass);

	return $user_id;
}

function mp_login(){	
	if(!$_POST && isset($_REQUEST["redirect_to"])){
		wp_redirect("/login?redirect_to=".$_REQUEST["redirect_to"]);
	}
	
	if(isset( $_REQUEST['redirect_to'])){
		$redirect_to = $_REQUEST['redirect_to'];
	}else{
		$redirect_to = admin_url();
	}
	
	if(is_ssl() && force_ssl_login() && !force_ssl_admin() && (0 !== strpos($redirect_to, 'https')) && (0 === strpos($redirect_to, 'http'))){
		$secure_cookie = false;
	}else{
		$secure_cookie = '';
	}
	
	$user = wp_signon('', $secure_cookie);

	$redirect_to = apply_filters('login_redirect', $redirect_to, isset( $_REQUEST['redirect_to'] ) ? $_REQUEST['redirect_to'] : '', $user);

	if(!is_wp_error($user)){
		//se não for admin redireciona para home
		if ( !$user->has_cap('edit_posts') && ( empty( $redirect_to ) || $redirect_to == 'wp-admin/' ) )
			$redirect_to = get_bloginfo('wpurl');
		wp_safe_redirect($redirect_to);
		exit();
	}

	$errors = $user;
	// Apaga os erros se for logout
	if(!empty($_GET['loggedout'])){
		$errors = new WP_Error();
	}
	// Se os cookies esão desabilitados precisa ser validado o usuário e senha
	if(isset($_POST['testcookie']) && empty($_COOKIE[TEST_COOKIE])){
		$errors->add('test_cookie', __("Cookies estão bloqueados ou não são suportados pelo seu navegador. Você precisa <a href='http://www.google.com/cookies.html' target='blank'>habilitar cookies</a> para se logar no site."));
	}
	
	if(isset($_GET['loggedout']) && TRUE == $_GET['loggedout'] ){
		
		$errors->add('loggedout', __('Você está deslogado agora', 'omo-site-load'));
		
	}elseif(isset($_GET['registration']) && 'disabled' == $_GET['registration']){
		
		$errors->add('registerdisabled', __('O cadastro está desabilitado agora.'));
		
	}elseif(isset($_GET['checkemail']) && 'confirm' == $_GET['checkemail']){
		$errors->add('confirm', __('Você deve receber um e-mail de confirmação em instantes.'), 'message');
	}elseif(isset($_GET['checkemail']) && 'newpass' == $_GET['checkemail'] ){
		$errors->add('newpass', __('Você deve receber um e-mail com uma nova senha em instantes.'), 'message');
	}elseif	(isset($_GET['checkemail']) && 'registered' == $_GET['checkemail']){
		$errors->add('registered', __('Cadastro completo. Por favor, verifique seu e-mail.'), 'message');
	}
	
	
	if(!is_wp_error($errors)){
		wp_redirect($redirect_to);
		die();
	}else{
		include(TEMPLATEPATH . '/login.php');
		die();
	}

}

function mp_password()
{
	$errors = new WP_Error();
	if ( $_POST['user_login'] )
	{
		$errors = retrieve_password();

		if ( !is_wp_error($errors) )
		{
			wp_redirect('wp-login.php?checkemail=confirm');
			exit();
		}
	}

	if ( 'invalidkey' == $_GET['error'] )
	{
		$errors->add('invalidkey', __('Sorry, that key does not appear to be valid.'));
	}

	$errors->add('registermsg', __('Please enter your username or e-mail address. You will receive a new password via e-mail.'), 'message');
	
	do_action('lost_password');
	do_action('lostpassword_post');

	if(!is_wp_error($errors)){
		wp_redirect($redirect_to);
		die();
	}else{
		include(TEMPLATEPATH . '/lostpassword.php');
		die();
	}
}

if ( $pagenow == "wp-login.php"  && $_GET['action'] != 'logout' && !isset($_GET['key']) ) {
	//add_action('init', 'mp_login_init', 98);
}